package cn.ljw.mybatis;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.*;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executor;

/**
 * @author 一朝风月
 * @date 2024/9/21 21:42
 * @Code 面向注解面向卿，终无解释再无你
 * @description
 */
public class LjwConnection  {
    /**
     * 获取指定类型的 Mapper 对象。
     * 使用动态代理来创建并返回指定类型的 Mapper。
     *
     * @param type Mapper 的类型
     * @param <T>  泛型类型
     * @return 返回指定类型的 Mapper 对象
     */
    public <T> T getMapper(Class<T> type) {
        // 创建动态代理对象
        T mapper = (T) Proxy.newProxyInstance(
                type.getClassLoader(),
                new Class<?>[]{type},
                new MapperInvocationHandler(type)
        );
        return mapper;
    }

    // 动态代理处理类
    private static class MapperInvocationHandler implements InvocationHandler {
        private final Class<?> mapperInterface;

        public MapperInvocationHandler(Class<?> mapperInterface) {
            this.mapperInterface = mapperInterface;
        }

        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            // 处理方法调用的逻辑
            System.out.println("Invoking method: " + method.getName() + " with arguments: " + args);
            // 这里可以添加具体的业务逻辑
            return null; // 假设返回 null
        }


    }

}
